import React from 'react';
import { FormGroup, DATA_ENTRY } from '../../../../../comps';
import { message } from 'antd';
import { connect } from 'dva';
class TzReportInfo extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      tzReportInfoRef: undefined,
      isExpectReturnFlag: 0, //【是否为标准化票据】为是时：票据代码 必填，为否时：票据代码 置灰
      jyltcsFlag: true, //【交易流通场所】为 99其他交易流通场所时：备注 必填，
      permissonBefore: false, //当前登录用户是否有报表权限--以前的已经弃用
    };
  }

  componentDidMount() {
    this.props?.onRef && this.props?.onRef(this);
  }
  UNSAFE_componentWillReceiveProps(nextPorps) {
    if (JSON.stringify(nextPorps.reportInfo) != JSON.stringify(this.props.reportInfo)) {
      this.setState({
        // 处理 交易流通场所 在编辑时的必填/置灰逻辑(值为99时 备注必填)
        jyltcsFlag: nextPorps.reportInfo?.jgbb_jyltcs && nextPorps.reportInfo?.jgbb_jyltcs == '99' ? true : false,
        // 处理 【是否为标准化票据】 在编辑时  票据代码 的必填/置灰逻辑（值为1 票据代码必填，0 票据代码置灰）
        isExpectReturnFlag: nextPorps.reportInfo?.jgbb_sfwbzhpj ? nextPorps.reportInfo?.jgbb_sfwbzhpj : '0',
      });
    }
  }
  // 是否为标准化票据
  isExpectReturnChange = (e) => {
    // 切换时重置  预期最高收益和预期最低收益
    this.state.tzReportInfoRef?.props.form.setFieldsValue({
      jgbb_pjdm: '',
    });
    // 【是否为标准化票据】为是时：票据代码 必填，为否时：票据代码 置灰
    this.setState({
      isExpectReturnFlag: e,
    });
  };
  // 交易流通场所
  jyltcsChange = (e) => {
    if (e == '99') {
      // 其他交易流通场所
      // 【交易流通场所】为 99其他交易流通场所时：备注 必填，
      this.setState({
        jyltcsFlag: true,
      });
    } else {
      this.setState({
        jyltcsFlag: false,
      });
    }
  };
  // 最长剩余期限（最小值限制）
  handleMaxValidator = (rule, val, callback) => {
    const {
      form: { getFieldValue },
    } = this.state.tzReportInfoRef.props;
    if (parseFloat(val) < parseFloat(getFieldValue('jgbb_zdsyqx'))) {
      callback('输入值不能小于最短剩余期限');
    }
    callback();
  };
  // 最短剩余期限（最大值限制）
  handleMinValidator = (rule, val, callback) => {
    const {
      form: { getFieldValue },
    } = this.state.tzReportInfoRef.props;
    if (parseFloat(val) > parseFloat(getFieldValue('jgbb_zcsyqx'))) {
      callback('输入值不能大于最长剩余期限');
    }
    callback();
  };
  // 加权剩余期限（最大值最小值限制）
  handleMedianValidator = (rule, val, callback) => {
    const {
      form: { getFieldValue },
    } = this.state.tzReportInfoRef.props;
    if (parseFloat(val) > parseFloat(getFieldValue('jgbb_zcsyqx'))) {
      callback('输入值不能大于最长剩余期限');
    } else if (parseFloat(val) < parseFloat(getFieldValue('jgbb_zdsyqx'))) {
      callback('输入值不能小于最短剩余期限');
    }
    callback();
  };
  //可供外部调用获取投资类报表信息
  getInfo = (callback) => {
    let values = this.state.tzReportInfoRef.getFormGroupData();
    if (values) {
      let result = values;
      if (JSON.stringify(result) != {}) {
        // 遍历报表信息对象，处理值
        for (var key in result) {
          if (key == 'jgbb_txll') {
            result[key] = Number(result[key] / 100).toFixed(7);
          }
        }
      }
      callback(result);
    } else {
      message.error('请填写完表单再提交！');
      return false;
    }
    // this.state.tzReportInfoRef.props.form.validateFieldsAndScroll((err, values) => {
    //     if (err) {
    //         message.error('请填写完表单再提交！');
    //         return false;
    //     } else {
    //         let result = values
    //         if (JSON.stringify(result) != {}) {
    //             // 遍历报表信息对象，处理值
    //             for (var key in result) {
    //                 if (key == 'jgbb_txll') {
    //                     result[key] = Number(result[key] / 100).toFixed(7)
    //                 }
    //             }
    //         }
    //         callback(result);
    //     }
    // })
  };
  render() {
    const { permissonBefore } = this.state;
    const { disableStatus, reportInfo = {}, nonstandarmaintenanceNewM } = this.props;
    const { dictMapSelect } = nonstandarmaintenanceNewM;
    const disabled = disableStatus;
    return (
      <FormGroup
        onRef={(ref) => (this.state.tzReportInfoRef = ref)}
        dataSource={[
          /******************************* 第一行 *****************************/
          {
            dataIndex: 'bondtostock_flag',
            title: '是否投向"市场化债转股相关产品的部分"',
            type: DATA_ENTRY.SELECT,
            initialValue: reportInfo?.bondtostock_flag,
            isTrueFalseJudge: true,
            allowClear: true,
            disabled,
          },
          {
            dataIndex: 'private_flag',
            title: '投向地方政府融资平台',
            type: DATA_ENTRY.SELECT,
            initialValue: reportInfo?.private_flag,
            isTrueFalseJudge: true,
            allowClear: true,
            disabled,
          },
          {
            dataIndex: 'is_fbzb',
            title: '是否非标转标',
            type: DATA_ENTRY.SELECT,
            initialValue: reportInfo?.is_fbzb,
            isTrueFalseJudge: true,
            allowClear: true,
            disabled,
          },
          {
            dataIndex: 'jgbb_jyltcs',
            title: '交易流通场所',
            type: DATA_ENTRY.SELECT,
            initialValue: reportInfo?.jgbb_jyltcs || '99',
            allowClear: true,
            disabled,
            dataSource: dictMapSelect['INVEST_JYLTCS'] || [],
            rules: [{ required: permissonBefore, message: '请选择交易流通场所' }],
            onChange: (e) => {
              this.jyltcsChange(e);
            }, //响应onChange，处理【备注】
          },
          {
            dataIndex: 'jgbb_sfwsyq',
            title: '是否为收/受益权',
            type: DATA_ENTRY.SELECT,
            initialValue: reportInfo?.jgbb_sfwsyq,
            isTrueFalseJudge: true,
            helper: '是否为某资产或项目的的收/受益权',
            allowClear: true,
            disabled,
            rules: [{ required: true, message: '请选择是否为收/受益权' }],
          },
          {
            dataIndex: 'jgbb_sfsymrfs',
            title: '是否属于买入返售',
            type: DATA_ENTRY.SELECT,
            initialValue: reportInfo?.jgbb_sfsymrfs,
            allowClear: true,
            isTrueFalseJudge: true,
            helper: '指是否通过买入返售形式投资资产',
            disabled,
            rules: [{ required: true, message: '请选择是否属于买入返售' }],
          },
          /******************************* 第二行 *****************************/
          {
            dataIndex: 'jgbb_type',
            title: '类型',
            type: DATA_ENTRY.SELECT,
            initialValue: reportInfo?.jgbb_type,
            allowClear: true,
            disabled,
            dataSource: dictMapSelect['INVEST_TYPE'] || [],
            rules: [{ required: permissonBefore, message: '请选择类型' }],
          },
          {
            dataIndex: 'jgbb_sfwbzhpj',
            title: '是否为标准化票据',
            type: DATA_ENTRY.SELECT,
            initialValue: reportInfo?.jgbb_sfwbzhpj,
            isTrueFalseJudge: true,
            helper: '是否为符合《标注化票据管理办法》定义的标准化票据',
            allowClear: true,
            disabled,
            rules: [{ required: permissonBefore, message: '请选择是否为标准化票据' }],
            onChange: (e) => {
              this.isExpectReturnChange(e);
            }, //响应onChange，处理【票据代码】
          },
          {
            dataIndex: 'jgbb_pjdm',
            title: '票据代码',
            type: DATA_ENTRY.INPUT,
            helper: '标准化票据的票据代码',
            initialValue: reportInfo?.jgbb_pjdm,
            disabled: disabled ? disabled : this.state.isExpectReturnFlag == '0' ? true : false,
            rules: [
              { max: 20, message: '字符不能超过20位！' },
              { required: this.state.isExpectReturnFlag == 1 ? true : false, message: '请输入票据代码' },
            ],
          },
          /******************************* 第三行 *****************************/
          {
            dataIndex: 'jgbb_sl',
            title: '数量',
            type: DATA_ENTRY.INPUTNUMBER,
            unit: '张',
            helper: '资产所含票据的总数量，如该资产以资产包的形式存在，该要素需填写其中所含票据的总数量。',
            min: 0,
            precision: 0,
            initialValue: reportInfo?.jgbb_sl,
            disabled,
            rules: [
              { pattern: /(^-?(?:\d|\d{0,6})?$)/, message: '字符不能超过6位！' },
              { required: permissonBefore, message: '请输入数量' },
            ],
          },
          {
            dataIndex: 'jgbb_hjje',
            title: '合计金额',
            type: DATA_ENTRY.INPUTNUMBER,
            unit: 'CNY',
            splitStyle: true,
            helper: '资产所含票据的金额加总，如该资产以资产包的形式存在，该要素需填写其中所含票据的总金额。',
            min: 0,
            precision: 2,
            initialValue: reportInfo?.jgbb_hjje,
            disabled,
            rules: [
              { pattern: /(^-?(?:\d|\d{0,12})(?:\.\d{0,2})?$)/, message: '字符不能超过15位！' },
              { required: permissonBefore, message: '请输入合计金额' },
            ],
          },
          {
            dataIndex: 'jgbb_jqsyqx',
            title: '加权剩余期限',
            type: DATA_ENTRY.INPUTNUMBER,
            unit: '天',
            helper: '资产所含票据中从资产登记日起至票面到期日之间期限的加权平均数，以金额为权重',
            min: 0,
            precision: 2,
            initialValue: reportInfo?.jgbb_jqsyqx,
            disabled,
            rules: [
              { pattern: /(^-?(?:\d|\d{0,3})(?:\.\d{0,2})?$)/, message: '字符不能大于等于7位！' },
              { validator: this.handleMedianValidator },
              { required: permissonBefore, message: '请输入加权剩余期限' },
            ],
          },
          /******************************* 第三行 *****************************/
          {
            dataIndex: 'jgbb_zcsyqx',
            title: '最长剩余期限',
            type: DATA_ENTRY.INPUTNUMBER,
            unit: '天',
            helper: '资产所含票据中从资产登记日起至票面到期日之间期限的最大值',
            min: 0,
            precision: 0,
            initialValue: reportInfo?.jgbb_zcsyqx,
            disabled,
            rules: [
              { pattern: /(^-?(?:\d|\d{0,5})?$)/, message: '字符不能超过5位！' },
              { validator: this.handleMaxValidator },
              { required: permissonBefore, message: '请输入最长剩余期限' },
            ],
          },
          {
            dataIndex: 'jgbb_zdsyqx',
            title: '最短剩余期限',
            type: DATA_ENTRY.INPUTNUMBER,
            unit: '天',
            helper: '资产所含票据中从资产登记日起至票面到期日之间期限的最小值。',
            min: 0,
            precision: 0,
            initialValue: reportInfo?.jgbb_zdsyqx,
            disabled,
            rules: [
              { pattern: /(^-?(?:\d|\d{0,5})?$)/, message: '字符不能超过5位！' },
              { validator: this.handleMinValidator },
              { required: permissonBefore, message: '请输入最短剩余期限' },
            ],
          },
          {
            dataIndex: 'jgbb_txll',
            title: '贴现利率',
            type: DATA_ENTRY.INPUTNUMBER,
            unit: '%',
            helper: '整个票据包资产的综合贴现利率，贴现利率应该为年化利率',
            min: 0,
            max: 99.99999,
            precision: 5,
            initialValue: reportInfo?.jgbb_txll ? Number(reportInfo?.jgbb_txll * 100).toFixed(5) : undefined,
            disabled,
            rules: [
              { pattern: /(^-?(?:\d|\d{0,2})(?:\.\d{0,5})?$)/, message: '字符不能超过8位！' },
              { required: permissonBefore, message: '请输入贴现利率' },
            ],
          },
          {
            dataIndex: 'jgbb_hy',
            title: '行业',
            helper: '根据票面金额为权重，金额占比最大的票据资产所对应的行业',
            type: DATA_ENTRY.FUNDAPPLICATIONINDUSTRYC,
            disabled: disabled,
            initialValue: reportInfo?.jgbb_hy,
            rules: [{ required: permissonBefore, message: '请选择' }],
            allowClear: true,
          },
          {
            dataIndex: 'jgbb_bz',
            title: '备注',
            type: DATA_ENTRY.INPUT,
            helper: '【交易流通场所】选择“其他交易流通场所 ”时，请在备注中标明交易场所',
            initialValue: reportInfo?.jgbb_bz,
            disabled,
            showTextArea: true,
            lineOne: true,
            rules: [
              {
                max: 256,
                message: '字符不超过256！',
              },
              { required: this.state.jyltcsFlag, message: '请输入备注' },
            ],
          },
        ]}
        autoLayout={true}
      ></FormGroup>
    );
  }
}
export default connect(({ nonstandarmaintenanceNewM }) => ({
  nonstandarmaintenanceNewM,
}))(TzReportInfo);
